/**
 * 
 * Copyright 2009 Marco Speranza <marco.speranza79@gmail.com>
 *    
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *   
 * http://www.apache.org/licenses/LICENSE-2.0
 *  
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.commons.util.conversion;

/**
 * Classe dedicata alle utilities di gestione della marca temporale.
 * Gestisce sia in ms che in String.

 * @author Marco Speranza
 */
 
public class DateConv {

  /** 
   * Converte la timestamp in formato stringa-SQL in
   * tempo assoluto espresso in ms dal 1970-01-01 00:00:00 GMT;
   * @param dataetempo stringa in formato "yyyy-mm-dd hh:mi:ss[.ms]";
   * @return long ms tempo assoluto in ms calcolato dal 1970-01-01 00:00:00 GMT;
   * @throws IllegalArgumentException in caso di un formato data errato.
   */
  public static long toms(String dataetempo)throws IllegalArgumentException{
    java.sql.Timestamp ts = java.sql.Timestamp.valueOf(dataetempo);
    long ms = ts.getTime();
    return(ms);
  }

  /** 
   * Converte il tempo assoluto espresso in ms dal 1970-01-01 00:00:00 GMT
   * nella timestamp corrispondente in formato stringa-SQL (yyyy-mm-dd hh:mi:ss);
   * @param ms tempo assoluto in ms calcolato dal 1970-01-01 00:00:00 GMT;
   * @return dataetempo stringa in formato "yyyy-mm-dd hh:mi:ss";
   */
  public static String toString(long ms) {

    ms /= 1000;
    ms *= 1000;
    java.sql.Timestamp ts = new java.sql.Timestamp(ms);
    String d = ts.toString();
    return(d.substring(0,d.indexOf('.')));
  }

  /**
   * Converte il tempo assoluto espresso in ms dal 1970-01-01 00:00:00 GMT
   * nella timestamp corrispondente in formato stringa-SQL (yyyy-mm-dd hh:mi:ss.ms);
   * @param ms tempo assoluto in ms calcolato dal 1970-01-01 00:00:00 GMT;
   * @return dataetempo stringa in formato "yyyy-mm-dd hh:mi:ss.ms";
   */
  public static String toStringMs(long ms) {

    java.sql.Timestamp ts = new java.sql.Timestamp(ms);
    String d = ts.toString();
    return(d);
  }

  /**
   * Ritorna il tempo corrente espresso in ms;
   * @return long tempo assoluto in ms dell'istante corrente, calcolato dal 1970-01-01 00:00:00 GMT;
   */
  public static long currTimeMs() {

    /* imposta il tempo corrente */
    java.util.Calendar cal =  java.util.Calendar.getInstance();
    java.util.Date data = cal.getTime();
    return (data.getTime());
  }

  /**
   * Ritorna il tempo corrente in formato stringa;
   * @return String timestamp dell'istante corrente in formato stringa-SQL (yyyy-mm-dd hh:mi:ss);
   */
  public static String currTimeStr() {
    /* imposta il tempo corrente */
    java.util.Calendar cal =  java.util.Calendar.getInstance();
    java.util.Date data = cal.getTime();
    long ms = data.getTime();
    return(DateConv.toString(ms));
  }

  /**
   * Ritorna il tempo corrente in formato stringa;
   * @return String timestamp dell'istante corrente in formato stringa-SQL (yyyy-mm-dd hh:mi:ss.ms);
   */
  public static String currTimeStrMs() {
    /* imposta il tempo corrente */
    java.util.Calendar cal =  java.util.Calendar.getInstance();
    java.util.Date data = cal.getTime();
    long ms = data.getTime();
    return(DateConv.toStringMs(ms));
  }

}


